home *** CD-ROM | disk | FTP | other *** search
- F********************************************************************
- F* *
- F* PGMID - DDS01RPF03 *
- F* *
- F* FUNCTION - GENERATE FIELD LEVEL PHYSICAL FILE DDS *
- F* *
- F* AUTHOR - TERRENCE W. MOYER *
- F* 55 KEPPEL AVE. *
- F* WEST LAWN, PA. 19609 *
- F* *
- F* DATE - NOV. 3, 1986 *
- F* *
- F* INDICATORS - 10 GENERAL PURPOSE, REUSABLE. *
- F* U1 DO NOT GENERATE FIELD REFERENCING IF U1 ON. *
- F* *
- F* NOTES - *
- F* SUPPORTED KEYWORDS *
- F* REFFLD, TEXT, EDTCDE/EDTWRD, REFSHIFT, COLHDG *
- F* DFT, ALIAS. *
- F* FLTPCN(*SINGLE) (SUPPORTED BY DEFAULT) *
- F* *
- F* UNSUPPORTED KEYWORDS *
- F* CMP, COMP, RANGE, FLTPCN(*DOUBLE). *
- F* *
- F********************************************************************
- FQADSPFFDIF E DISK UC
- FSRCFIL O F 92 DISK A UC
- E WRK 68 1 WORK ARRAY
- E WRK1 36 1 DDS FUNCT. FIELD
- E WRK2 20 1 COLHDG WORK
- I* LDA WITH INPUT FILE AND SOURCE FILE INFORMATION
- I UDS
- I 1 10 LINFL
- I 11 20 LINLB
- I 21 26 LINDT
- I 27 32 LINTM
- I 33 33 LINTYP
- I 51 100 LINTXT
- I 101 110 LSRCFL
- I 111 120 LSRCLB
- I 121 130 LSRCMB
- I 201 2062LSRCSQ
- I 207 2120LSRCDT
- I* SOURCE SEQUENCE AND SOURCE DATE DS - WRITTEN TO DDS SRCFILE.
- I DS
- I 1 62SRCSEQ
- I 7 120SRCDAT
- I* DDS SPECIFICATION - TO WRITE ACTUAL SPEC RECORDS TO DDS SRCFILE.
- IDSPEC DS
- I 1 5 DBLNK1
- I 6 6 DSPECA
- I 7 16 DBLNK2
- I 17 17 DNMTYP
- I 18 18 DBLNK3
- I 19 28 DNAME
- I 29 29 DREF
- I 30 34 DLEN
- I 35 35 DDTYP
- I 36 37 DDEC
- I 38 44 DBLNK4
- I 45 80 DFUNC
- I 1 80 DSPEC1
- I 7 80 DSPEC2
- C*------------------------------------------------------------------*
- C* MAINLINE *
- C*------------------------------------------------------------------*
- C* INITIALIZATION AND SETUP.
- C*
- C Z-ADDLSRCSQ SRCSEQ RETRIEVE SRCSEQ
- C Z-ADDLSRCDT SRCDAT AND SRCDAT.
- C MOVE 'A' DSPECA INIT. SPEC. DS.
- C*
- C OPEN SRCFIL OPEN FILES.
- C OPEN QADSPFFD
- C READ QADSPFFD 10 GET RECORD.
- C*
- C*------------------------------------------------------------------*
- C* WRITE FIELD LEVEL KEYWORDS.
- C*------------------------------------------------------------------*
- C* FOR EACH FIELD DO:
- C *IN10 DOWEQ'0'
- C*
- C* CREATE FIELD NAME RECORD.
- C MOVE WHFLDE DNAME MOVE FIELD NAME
- C WHRFIL IFNE *BLANK IS THIS A REF
- C *INU1 ANDNE'1' KEYWORD FIELD.
- C MOVE 'R' DREF IF SO AND NU1
- C EXSR @BLDRF BUILD KEYWORD.
- C ELSE ELSE,
- C WHFLDD IFGT *ZERO IF FLD NUMERIC
- C MOVE WHFLDD DLEN DECIMAL DIGITS.
- C MOVE WHFLDP DDEC DECIMAL PLACES.
- C ELSE ELSE IF ALPHA-
- C MOVE WHFLDB DLEN ALPH FLD LENGTH
- C END END LENGTH.
- C MOVEADLEN WRK1
- C Z-ADD+1 X
- C WRK1,X DOWEQ'0'
- C WRK1,X OREQ ' ' ZERO SUPPRESS
- C X ANDLE+5 LENGTH FIELD.
- C MOVE ' ' WRK1,X
- C ADD +1 X
- C END
- C MOVEAWRK1,1 DLEN
- C MOVEADDEC WRK1
- C WRK1,1 IFEQ '0'
- C MOVE ' ' WRK1,1 ZERO SUPPRESS
- C END DECIMAL POS.
- C MOVEAWRK1 DDEC
- C MOVE WHFLDT DDTYP MOVE FLD TYPE.
- C END IF REF. END.
- C* WRITE OTHER SUPPORTED KEYWORDS.
- C WHCHD1 IFNE *BLANK
- C WHCHD2 ORNE *BLANK
- C WHCHD3 ORNE *BLANK
- C MOVE '1' COLHD 1
- C EXSR @COLHD COLHDG KEYWORD.
- C ELSE
- C MOVE '0' COLHD
- C END
- C WHFTXT IFNE *BLANK
- C EXSR @TEXT TEXT FIELD-LVL.
- C END
- C MOVELWHECDE BYTE 1
- C BYTE IFNE *BLANK EDTCDE KEYWORD
- C MOVE *BLANK WRK1
- C MOVEA'EDTCDE(' WRK1
- C MOVEAWHECDE WRK1,8
- C MOVEA')' WRK1,9
- C MOVEAWRK1 DFUNC
- C MOVE DSPEC1 LINE
- C EXSR @SRCLN
- C MOVE *BLANK DSPEC2
- C ELSE
- C WHEWRD IFNE *BLANK EDTWRD KEYWORD
- C MOVE *BLANK WRK1
- C MOVEA'EDTWRD(' WRK1
- C MOVEAWHEWRD WRK1,8
- C Z-ADD+36 X
- C WRK1,X DOWEQ' '
- C SUB +1 X
- C END
- C ADD +1 X
- C MOVEA')' WRK1,X
- C MOVEAWRK1 DFUNC
- C MOVE DSPEC1 LINE
- C EXSR @SRCLN
- C MOVE *BLANK DSPEC2
- C END
- C END
- C WHSHFT IFNE *BLANK REFSHIFT
- C MOVE *BLANK WRK1 KEYWORD.
- C MOVEA'REFSHIFT'WRK1
- C MOVE '(' WRK1,9
- C Z-ADD+10 X
- C MOVEAWHSHFT WRK1,X
- C ADD +1 X
- C MOVEA')' WRK1,X
- C MOVEAWRK1 DFUNC
- C MOVE DSPEC1 LINE
- C EXSR @SRCLN
- C MOVE *BLANK DSPEC2
- C END
- C WHDFT IFNE *BLANK DFT
- C MOVE *BLANK WRK1 KEYWORD.
- C MOVEA'DFT(' WRK1
- C MOVEAWHDFT WRK1,5
- C Z-ADD+36 X
- C WRK1,X DOWEQ' '
- C SUB +1 X
- C END
- C ADD +1 X
- C WHDFTL IFEQ -1 CHECK DFT VALUE
- C WRK1,5 ANDEQ'''' FOR TRUNCATION.
- C MOVEA''')' WRK1,X IF TRUNCATED
- C ELSE AND VALUE IS
- C MOVEA')' WRK1,X QUOTED, MOVE AN
- C END END QUOTE.
- C MOVEAWRK1 DFUNC
- C MOVE DSPEC1 LINE
- C EXSR @SRCLN
- C MOVE *BLANK DSPEC2
- C END
- C WHALIS IFNE *BLANK ALIAS
- C MOVE *BLANK WRK1 KEYWORD.
- C MOVEA'ALIAS(' WRK1
- C MOVEAWHALIS WRK1,7
- C Z-ADD+36 X
- C WRK1,X DOWEQ' '
- C SUB +1 X
- C END
- C ADD +1 X
- C MOVEA')' WRK1,X
- C MOVEAWRK1 DFUNC
- C MOVE DSPEC1 LINE
- C EXSR @SRCLN
- C MOVE *BLANK DSPEC2
- C END
- C*
- C READ QADSPFFD 10 GET RECORD.
- C END END READ LOOP.
- C*
- C* CLOSE FILES, PASS DATA, AND END PROGRAM.
- C*
- C CLOSEQADSPFFD
- C CLOSESRCFIL
- C*
- C Z-ADDSRCSEQ LSRCSQ PASS SRCSEQ
- C Z-ADDSRCDAT LSRCDT AND SRCDAT
- C SETON LR
- C*
- C*------------------------------------------------------------------*
- C* @BLDRF - BUILD THE REFFLD KEYWORD
- C*------------------------------------------------------------------*
- C*
- C @BLDRF BEGSR
- C*
- C MOVE *BLANK WRK1
- C MOVEA'REFFLD(' WRK1 MOVE KEYWORD TO
- C Z-ADD+8 Y 40 ARRAY
- C*
- C MOVE *BLANK WRK
- C MOVEAWHRFLD WRK BUILD REFERENCE
- C Z-ADD+1 X 40 FIELDS.
- C WRK,X DOWNE' ' FIND END OF
- C ADD +1 X REFFLD NAME.
- C END
- C MOVE '.' WRK,X
- C ADD +1 X
- C MOVEAWHRFMT WRK,X
- C WRK,X DOWNE' ' FIND END OF
- C ADD +1 X FORMAT NAME.
- C END
- C ADD +1 X
- C MOVEAWHRFIL WRK,X
- C WRK,X DOWNE' ' FIND END OF
- C ADD +1 X FILE NAME.
- C END
- C MOVE '.' WRK,X
- C ADD +1 X
- C MOVEAWHRLIB WRK,X
- C WRK,X DOWNE' ' FIND END OF
- C ADD +1 X LIBRARY NAME.
- C END
- C SUB +1 X RESET LENGTH.
- C Z-ADDX REFLEN 40 SAVE LENGTH.
- C* MOVE REFERENCE TO FUNCTION WORK ARRAY.
- C Z-ADD+1 X FOR X = 1
- C X DOWLEREFLEN TO REFLEN DO
- C MOVE WRK,X WRK1,Y MOVE A CHAR.
- C ADD +1 X ADD TO INDEX.
- C ADD +1 Y
- C Y IFEQ +36 CHECK FOR
- C X ANDLEREFLEN
- C MOVE '-' WRK1,Y CONTINUATION
- C MOVEAWRK1 DFUNC LINES
- C MOVE DSPEC1 LINE 80
- C EXSR @SRCLN WRITE THE
- C MOVE *BLANK WRK1 CONTINUATION
- C Z-ADD+1 Y LINE.
- C MOVE *BLANK DSPEC2
- C END END CONTIUATION
- C END END DOWLE REFL.
- C MOVEA')' WRK1,Y MOVE IN END-
- C MOVEAWRK1 DFUNC PARENTHESIS.
- C MOVE DSPEC1 LINE WRITE REF.
- C EXSR @SRCLN
- C MOVE *BLANK DSPEC2
- C*
- C ENDSR
- C*------------------------------------------------------------------*
- C/SPACE 3
- C*------------------------------------------------------------------*
- C* @COLHD - BUILD THE COLHDG KEYWORD
- C*------------------------------------------------------------------*
- C*
- C @COLHD BEGSR
- C*
- C MOVE *BLANK WRK1
- C MOVEA'COLHDG(' WRK1 MOVE KEYWORD TO
- C Z-ADD+8 Y 40 ARRAY
- C*
- C* COLHDG LOOP SETUP.
- C WHCHD2 IFEQ *BLANK DETERMINE
- C WHCHD3 ANDEQ*BLANK HOW MANY TIMES
- C Z-ADD+1 LPCNT 40 THROUGH THE
- C ELSE COLHDG LOOP.
- C WHCHD3 IFEQ *BLANK MAXIMUM IS 3.
- C Z-ADD+2 LPCNT
- C ELSE
- C Z-ADD+3 LPCNT
- C END
- C END
- C*
- C MOVE *BLANK WRK CLEAR WORK ARRY
- C Z-ADD+1 X
- C*
- C* MAIN LOOP TO CREATE COLHDGS - EXECUTED THREE TIMES AT MOST.
- C 1 DO LPCNT W 40 FOR EACH COLHDG
- C W IFEQ +1 DO:
- C MOVELWHCHD1 FIELD 20
- C END DETERMINE WHICH
- C W IFEQ +2 HEADING TO USE
- C MOVELWHCHD2 FIELD IN THE LOOP.
- C END PUT HEADING IN
- C W IFEQ +3 FIELD.
- C MOVELWHCHD3 FIELD
- C END
- C*
- C FIELD IFEQ *BLANK IF COLHDG BLANK
- C MOVEA''' ''' WRK,X PUT ' ' IN
- C ADD +4 X WRK ARRAY.
- C ELSE ELSE
- C MOVEAFIELD WRK2 GET LENGTH OF
- C EXSR @COLLN HEADING AND
- C MOVE '''' WRK,X MOVE STARTING
- C ADD +1 X QUOTE & HEADING
- C Z-ADD+1 Z TO WRK.
- C Z DOWLECOLLEN
- C MOVE WRK2,Z WRK,X MOVE HEAD ONE
- C ADD +1 X CHAR. AT A TIME
- C ADD +1 Z
- C END END DOWLE.
- C MOVE '''' WRK,X PLACE END QUOTE
- C ADD +2 X AND A SPACE.
- C END END IFEQ.
- C END END DO 3 TIMES.
- C*
- C Z-ADD+68 X FIND TOTAL
- C WRK,X DOWEQ' ' LENGTH OF
- C SUB +1 X COLHDG DATA.
- C END
- C Z-ADDX COLLEN SAVE LENGTH.
- C*
- C* MOVE HEADINGS TO FUNCTION WORK ARRAY.
- C Z-ADD+1 X FOR X = 1
- C X DOWLECOLLEN TO COLLEN DO
- C MOVE WRK,X WRK1,Y MOVE A CHAR.
- C ADD +1 X ADD TO INDEX.
- C ADD +1 Y
- C Y IFEQ +36 CHECK FOR
- C MOVE '-' WRK1,Y CONTINUATION
- C MOVEAWRK1 DFUNC LINES
- C MOVE DSPEC1 LINE 80
- C EXSR @SRCLN WRITE THE
- C MOVE *BLANK WRK1 CONTINUATION
- C Z-ADD+1 Y LINE.
- C MOVE *BLANK DSPEC2
- C END END CONTIUATION
- C END END DOWLE REFL.
- C MOVEA')' WRK1,Y MOVE IN CLOSING
- C MOVEAWRK1 DFUNC PARENTHESIS AND
- C MOVE DSPEC1 LINE 80 WRITE THE
- C EXSR @SRCLN KEYWORD.
- C MOVE *BLANK DSPEC2
- C*
- C ENDSR
- C*------------------------------------------------------------------*
- C/SPACE 3
- C*------------------------------------------------------------------*
- C* @COLLN - GET THE LENGTH OF STRING IN WRK2.
- C*------------------------------------------------------------------*
- C*
- C @COLLN BEGSR
- C*
- C Z-ADD+20 Z 40
- C WRK2,Z DOWEQ' '
- C Z ANDGE+1
- C SUB +1 Z
- C END
- C Z-ADDZ COLLEN 40
- C*
- C ENDSR
- C*------------------------------------------------------------------*
- C/SPACE 3
- C*------------------------------------------------------------------*
- C* @TEXT - BUILD FIELD LEVEL TEXT
- C*------------------------------------------------------------------*
- C*
- C @TEXT BEGSR
- C* IF SUPPRESS
- C *INU2 IFEQ '1' TEXT OPTION,
- C COLHD ANDEQ'1' AND COLHD'S
- C GOTO ENDTXT EXIST, THEN
- C END EXIT.
- C*
- C WHFTXT IFNE *BLANK BEGIN TEXT.
- C MOVE *BLANK WRK
- C MOVE *BLANK WRK1
- C MOVEA'TEXT(''' WRK1 INIT FUNC ARRAY
- C Z-ADD+7 Y 40 AND INDEX.
- C MOVEAWHFTXT WRK FIND LENGTH OF
- C Z-ADD+50 X FILE TEXT.
- C WRK,X DOWEQ' '
- C SUB +1 X
- C END
- C Z-ADDX TXTLEN 40 SAVE LENGTH.
- C* MOVE TEXT TO FUNCTION WORK ARRAY.
- C Z-ADD+1 X FOR X = 1
- C X DOWLETXTLEN TO TXTLEN DO
- C MOVE WRK,X WRK1,Y MOVE A CHAR.
- C ADD +1 X ADD TO INDEX.
- C ADD +1 Y
- C Y IFEQ +36 CHECK FOR
- C MOVE '-' WRK1,Y CONTINUATION
- C MOVEAWRK1 DFUNC LINES
- C MOVE DSPEC1 LINE
- C EXSR @SRCLN WRITE THE
- C MOVE *BLANK WRK1 CONTINUATION
- C Z-ADD+1 Y LINE.
- C MOVE *BLANK DSPEC2
- C END END CONTIUATION
- C END END DOWLE TXTL.
- C MOVEA''')' WRK1,Y MOVE IN END-
- C MOVEAWRK1 DFUNC QUOTE AND PAREN.
- C MOVE DSPEC1 LINE WRITE TEXT.
- C EXSR @SRCLN
- C MOVE *BLANK DSPEC2
- C END END TEXT IF.
- C*
- C ENDTXT ENDSR
- C*------------------------------------------------------------------*
- C/SPACE 3
- C*------------------------------------------------------------------*
- C* ADD TO SOURCE SEQUENCE NUMBER AND WRITE AN OUTPUT LINE
- C*------------------------------------------------------------------*
- C*
- C @SRCLN BEGSR
- C*
- C ADD +1 SRCSEQ
- C EXCPTSRCLIN
- C*
- C ENDSR
- C*------------------------------------------------------------------*
- C/SPACE 3
- OSRCFIL EADD SRCLIN
- O SRCSEQ 6
- O SRCDAT 12
- O LINE 92
-